package com.zone.domain.acticity.service;

import com.zone.domain.acticity.model.valobj.ActivitySkuStockSubTaskVO;

/**
 * @author: zongzi
 * @description: 活动库存相关
 * @date: 2025/2/15
 */
public interface IActivitySkuStock {

    /**
     * 扣减活动库存（渐减式扣减 100，99，98...）
     *
     * @param sku
     */
    boolean descActivitySkuStock(Long sku);

    /**
     * 将奖品库存扣减任务加入到队列中
     */
    void offerActivitySkuStockSubTask(ActivitySkuStockSubTaskVO subTaskVO);

    /**
     * 拉取一条 奖品库存扣减任务，如果队列为空，则返回空
     *
     * @return 奖品库存扣减任务
     */
    ActivitySkuStockSubTaskVO pollAwardStockSubTask();

    /**
     * 扣减活动库存剩余数量 - 1(等于0的时候不更新，库存清0消费者执行后，在调用该方法会导致库存出现负数)
     *
     * @param sku
     */
    void decrActivitySkuCountSurplus(Long sku);

    /**
     * 将sku剩余库存清0
     * @param sku
     */
    void clearZeroActivitySkuCount(Long sku);
}
